package sii.commons;

import java.io.*;

import org.apache.commons.configuration.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import sii.dati.DataManagerRatings;


public class ConfigManager {
    private static XMLConfiguration configfile;
    private static Log log;
    public static boolean verbose = true;
    public static boolean debug = false;

    private ConfigManager() throws ConfigException {

    }

    private static void init() throws ConfigException {
	if (configfile == null) {
	    log = LogFactory.getLog(ConfigManager.class);

	    File currentDir = new java.io.File("");
	    String path = currentDir.getAbsolutePath()
		    + System.getProperty("file.separator");
	    try {
		ConfigManager.configfile = new XMLConfiguration(path
			+ "config.xml");
	    } catch (ConfigurationException e) {
		log.error("Errore durante la creazione del ConfigManager", e);
		throw new ConfigException(
			"Errore durante la creazione del ConfigManager:"
				+ e.getMessage());
	    }
	}
    }

    /**
     * Restituisce una stringa contenuta nel file config.xml
     * 
     * @param key
     *            specifica il percorso dell'elemento che contiene il valore ad
     *            es. "db.host" recupera il valore localhost contenuto
     *            nell'elemento host
     * 
     *            <pre>
     * &lt;db&gt;
     * ...
     *    &lt;host&gt;localhost&lt;/host&gt;
     * ...
     * &lt;/db&gt;
     * <p>
     * @return il valore stringa contenuto nel file config.xml
     * @throws ConfigException
     */
    public static String get(String key) throws ConfigException {
	init();
	return configfile.getString(key.toLowerCase());
    }

    /**
     * Restituisce un intero contenuto nel file config.xml
     * 
     * @param key
     *            specifica il percorso dell'elemento che contiene il valore ad
     *            es. "db.port" recupera il valore localhost contenuto
     *            nell'elemento port:
     * 
     *            <pre>
     * &lt;db&gt;
     * ...
     *    &lt;host&gt;localhost&lt;/host&gt;
     * ...
     * &lt;/db&gt;
     * <p>
     * @return il valore intero contenuto nel file config.xml
     * @throws ConfigException
     */
    public static int getInt(String key) throws ConfigException {
	init();
	return configfile.getInt(key.toLowerCase());
    }

    /**
     * Restituisce un numero reale contenuto nel file config.xml
     * 
     * @param key
     *            specifica il percorso dell'elemento che contiene il valore ad
     *            es. "delta" recupera il valore 0.7 contenuto nell'elemento
     *            delta:
     * 
     * <pre><p>
     * &lt;delta&gt;0.7&lt;/delta&gt; 
     * @return il valore reale contenuto nel file config.xml
     * @throws ConfigException
     */
    public static float getFloat(String key) throws ConfigException {
	init();
	return configfile.getFloat(key.toLowerCase());
    }
}
